fit_plane_surface
0 0.05 0.1 0.15 0.2
0 0.6895831 0.7139563 0.7383296 0.7627028 0.7870761
0.05 0.7141167 0.7384900 0.7628632 0.7872365 0.8116097
0.1 0.7386504 0.7630236 0.7873969 0.8117701 0.8361434
0.15 0.7631840 0.7875573 0.8119305 0.8363038 0.8606770
0.25 0.3 0.35 0.4 0.45
0 0.8114493 0.8358226 0.8601958 0.8845690 0.9089423
0.05 0.8359830 0.8603562 0.8847295 0.9091027 0.9334759
0.1 0.8605166 0.8848899 0.9092631 0.9336364 0.9580096
0.15 0.8850503 0.9094235 0.9337968 0.9581700 0.9825433
0.5 0.55 0.6 0.65 0.7 0.75
0 0.9333155 0.9576888 0.982062 1.006435 1.030809 1.055182
0.05 0.9578492 0.9822224 1.006596 1.030969 1.055342 1.079715
0.1 0.9823828 1.0067561 1.031129 1.055503 1.079876 1.104249
0.15 1.0069165 1.0312897 1.055663 1.080036 1.104409 1.128783
0.8 0.85 0.9 0.95 1 1.05
0 1.079555 1.103928 1.128301 1.152675 1.177048 1.201421
0.05 1.104089 1.128462 1.152835 1.177208 1.201582 1.225955
0.1 1.128622 1.152996 1.177369 1.201742 1.226115 1.250489
0.15 1.153156 1.177529 1.201902 1.226276 1.250649 1.275022
1.1 1.15 1.2 1.25 1.3 1.35
0 1.225794 1.250168 1.274541 1.298914 1.323287 1.347661
0.05 1.250328 1.274701 1.299075 1.323448 1.347821 1.372194
0.1 1.274862 1.299235 1.323608 1.347982 1.372355 1.396728
0.15 1.299395 1.323769 1.348142 1.372515 1.396888 1.421262
1.4 1.45 1.5 1.55 1.6 1.65
0 1.372034 1.396407 1.420780 1.445154 1.469527 1.493900
0.05 1.396568 1.420941 1.445314 1.469687 1.494061 1.518434
0.1 1.421101 1.445475 1.469848 1.494221 1.518594 1.542967
0.15 1.445635 1.470008 1.494381 1.518755 1.543128 1.567501
1.7 1.75 1.8 1.85 1.9 1.95
0 1.518273 1.542647 1.567020 1.591393 1.615766 1.640140
0.05 1.542807 1.567180 1.591554 1.615927 1.640300 1.664673
0.1 1.567341 1.591714 1.616087 1.640460 1.664834 1.689207
0.15 1.591874 1.616248 1.640621 1.664994 1.689367 1.713741
2 2.05 2.1 2.15 2.2 2.25
0 1.664513 1.688886 1.713259 1.737633 1.762006 1.786379
0.05 1.689047 1.713420 1.737793 1.762166 1.786540 1.810913
0.1 1.713580 1.737953 1.762327 1.786700 1.811073 1.835446
0.15 1.738114 1.762487 1.786860 1.811234 1.835607 1.859980
2.3 2.35 2.4 2.45 2.5 2.55
0 1.810752 1.835126 1.859499 1.883872 1.908245 1.932619
0.05 1.835286 1.859659 1.884033 1.908406 1.932779 1.957152
0.1 1.859820 1.884193 1.908566 1.932939 1.957313 1.981686
0.15 1.884353 1.908727 1.933100 1.957473 1.981846 2.006220
2.6 2.65 2.7 2.75 2.8 2.85
0 1.956992 1.981365 2.005738 2.030112 2.054485 2.078858
0.05 1.981525 2.005899 2.030272 2.054645 2.079018 2.103392
0.1 2.006059 2.030432 2.054806 2.079179 2.103552 2.127925
0.15 2.030593 2.054966 2.079339 2.103713 2.128086 2.152459
2.9 2.95 3 3.05 3.1 3.15
0 2.103231 2.127605 2.151978 2.176351 2.200724 2.225098
0.05 2.127765 2.152138 2.176511 2.200885 2.225258 2.249631
0.1 2.152299 2.176672 2.201045 2.225418 2.249792 2.274165
0.15 2.176832 2.201206 2.225579 2.249952 2.274325 2.298698
3.2 3.25 3.3 3.35 3.4 3.45
0 2.249471 2.273844 2.298217 2.322591 2.346964 2.371337
0.05 2.274004 2.298378 2.322751 2.347124 2.371497 2.395871
0.1 2.298538 2.322911 2.347285 2.371658 2.396031 2.420404
0.15 2.323072 2.347445 2.371818 2.396191 2.420565 2.444938
3.5 3.55 3.6 3.65 3.7 3.75
0 2.395710 2.420083 2.444457 2.468830 2.493203 2.517576
0.05 2.420244 2.444617 2.468990 2.493364 2.517737 2.542110
0.1 2.444778 2.469151 2.493524 2.517897 2.542271 2.566644
0.15 2.469311 2.493684 2.518058 2.542431 2.566804 2.591177
3.8 3.85 3.9 3.95 4 4.05
0 2.541950 2.566323 2.590696 2.615069 2.639443 2.663816
0.05 2.566483 2.590857 2.615230 2.639603 2.663976 2.688350
0.1 2.591017 2.615390 2.639764 2.664137 2.688510 2.712883
0.15 2.615551 2.639924 2.664297 2.688670 2.713044 2.737417
4.1 4.15 4.2 4.25 4.3 4.35
0 2.688189 2.712562 2.736936 2.761309 2.785682 2.810055
0.05 2.712723 2.737096 2.761469 2.785843 2.810216 2.834589
0.1 2.737256 2.761630 2.786003 2.810376 2.834749 2.859123
0.15 2.761790 2.786163 2.810537 2.834910 2.859283 2.883656
4.4 4.45 4.5 4.55 4.6 4.65
0 2.834429 2.858802 2.883175 2.907548 2.931922 2.956295
0.05 2.858962 2.883336 2.907709 2.932082 2.956455 2.980829
0.1 2.883496 2.907869 2.932242 2.956616 2.980989 3.005362
0.15 2.908030 2.932403 2.956776 2.981149 3.005523 3.029896
4.7 4.75 4.8 4.85 4.9 4.95
0 2.980668 3.005041 3.029415 3.053788 3.078161 3.102534
0.05 3.005202 3.029575 3.053948 3.078322 3.102695 3.127068
0.1 3.029735 3.054109 3.078482 3.102855 3.127228 3.151602
0.15 3.054269 3.078642 3.103016 3.127389 3.151762 3.176135
5 5.05 5.1 5.15 5.2 5.25
0 3.126908 3.151281 3.175654 3.200027 3.224401 3.248774
0.05 3.151441 3.175815 3.200188 3.224561 3.248934 3.273307
0.1 3.175975 3.200348 3.224721 3.249095 3.273468 3.297841
0.15 3.200509 3.224882 3.249255 3.273628 3.298002 3.322375
5.3 5.35 5.4 5.45 5.5 5.55
0 3.273147 3.297520 3.321894 3.346267 3.370640 3.395013
0.05 3.297681 3.322054 3.346427 3.370800 3.395174 3.419547
0.1 3.322214 3.346588 3.370961 3.395334 3.419707 3.444081
0.15 3.346748 3.371121 3.395495 3.419868 3.444241 3.468614
5.6 5.65 5.7 5.75 5.8 5.85
0 3.419387 3.443760 3.468133 3.492506 3.516880 3.541253
0.05 3.443920 3.468293 3.492667 3.517040 3.541413 3.565786
0.1 3.468454 3.492827 3.517200 3.541574 3.565947 3.590320
0.15 3.492988 3.517361 3.541734 3.566107 3.590480 3.614854
5.9 5.95 6 6.05 6.1 6.15
0 3.565626 3.589999 3.614373 3.638746 3.663119 3.687492
0.05 3.590160 3.614533 3.638906 3.663279 3.687653 3.712026
0.1 3.614693 3.639067 3.663440 3.687813 3.712186 3.736560
0.15 3.639227 3.663600 3.687973 3.712347 3.736720 3.761093
6.2 6.25 6.3 6.35 6.4 6.45
0 3.711865 3.736239 3.760612 3.784985 3.809358 3.833732
0.05 3.736399 3.760772 3.785146 3.809519 3.833892 3.858265
0.1 3.760933 3.785306 3.809679 3.834053 3.858426 3.882799
0.15 3.785466 3.809840 3.834213 3.858586 3.882959 3.907333
6.5 6.55 6.6 6.65 6.7 6.75
0 3.858105 3.882478 3.906851 3.931225 3.955598 3.979971
0.05 3.882639 3.907012 3.931385 3.955758 3.980132 4.004505
0.1 3.907172 3.931546 3.955919 3.980292 4.004665 4.029038
0.15 3.931706 3.956079 3.980452 4.004826 4.029199 4.053572
6.8 6.85 6.9 6.95 7 7.05
0 4.004344 4.028718 4.053091 4.077464 4.101837 4.126211
0.05 4.028878 4.053251 4.077625 4.101998 4.126371 4.150744
0.1 4.053412 4.077785 4.102158 4.126531 4.150905 4.175278
0.15 4.077945 4.102319 4.126692 4.151065 4.175438 4.199812
7.1 7.15 7.2 7.25 7.3 7.35
0 4.150584 4.174957 4.199330 4.223704 4.248077 4.272450
0.05 4.175118 4.199491 4.223864 4.248237 4.272611 4.296984
0.1 4.199651 4.224024 4.248398 4.272771 4.297144 4.321517
0.15 4.224185 4.248558 4.272931 4.297305 4.321678 4.346051
7.4 7.45 7.5 7.55 7.6 7.65
0 4.296823 4.321197 4.345570 4.369943 4.394316 4.418690
0.05 4.321357 4.345730 4.370104 4.394477 4.418850 4.443223
0.1 4.345891 4.370264 4.394637 4.419010 4.443384 4.467757
0.15 4.370424 4.394798 4.419171 4.443544 4.467917 4.492291
7.7 7.75 7.8 7.85 7.9 7.95
0 4.443063 4.467436 4.491809 4.516183 4.540556 4.564929
0.05 4.467596 4.491970 4.516343 4.540716 4.565089 4.589463
0.1 4.492130 4.516503 4.540877 4.565250 4.589623 4.613996
0.15 4.516664 4.541037 4.565410 4.589784 4.614157 4.638530
8 8.05 8.1 8.15 8.2 8.25
0 4.589302 4.613676 4.638049 4.662422 4.686795 4.711169
0.05 4.613836 4.638209 4.662582 4.686956 4.711329 4.735702
0.1 4.638370 4.662743 4.687116 4.711489 4.735863 4.760236
0.15 4.662903 4.687277 4.711650 4.736023 4.760396 4.784770
8.3 8.35 8.4 8.45 8.5 8.55
0 4.735542 4.759915 4.784288 4.808662 4.833035 4.857408
0.05 4.760075 4.784449 4.808822 4.833195 4.857568 4.881942
0.1 4.784609 4.808982 4.833356 4.857729 4.882102 4.906475
0.15 4.809143 4.833516 4.857889 4.882262 4.906636 4.931009
8.6 8.65 8.7 8.75 8.8 8.85
0 4.881781 4.906155 4.930528 4.954901 4.979274 5.003647
0.05 4.906315 4.930688 4.955061 4.979435 5.003808 5.028181
0.1 4.930849 4.955222 4.979595 5.003968 5.028342 5.052715
0.15 4.955382 4.979755 5.004129 5.028502 5.052875 5.077248
8.9 8.95 9 9.05 9.1 9.15
0 5.028021 5.052394 5.076767 5.101140 5.125514 5.149887
0.05 5.052554 5.076928 5.101301 5.125674 5.150047 5.174421
0.1 5.077088 5.101461 5.125835 5.150208 5.174581 5.198954
0.15 5.101622 5.125995 5.150368 5.174741 5.199115 5.223488
9.2 9.25 9.3 9.35 9.4
0 5.174260 5.198633 5.223007 5.247380 5.271753
0.05 5.198794 5.223167 5.247540 5.271914 5.296287
0.1 5.223328 5.247701 5.272074 5.296447 5.320820
0.15 5.247861 5.272234 5.296608 5.320981 5.345354
9.45 9.5 9.55 9.6 9.65
0 5.296126 5.320500 5.344873 5.369246 5.393619
0.05 5.320660 5.345033 5.369407 5.393780 5.418153
0.1 5.345194 5.369567 5.393940 5.418313 5.442687
0.15 5.369727 5.394101 5.418474 5.442847 5.467220
9.7 9.75 9.8 9.85 9.9
0 5.417993 5.442366 5.466739 5.491112 5.515486
0.05 5.442526 5.466900 5.491273 5.515646 5.540019
0.1 5.467060 5.491433 5.515806 5.540180 5.564553
0.15 5.491594 5.515967 5.540340 5.564713 5.589087
9.95 10
0 5.539859 5.564232
0.05 5.564393 5.588766
0.1 5.588926 5.613299
0.15 5.613460 5.637833
[ erreichte getOption("max.print") -- 197 Zeilen ausgelassen ]
x1 <- runif(100, min = 0, max = 10)
hist(x1)

x2 <- runif(100, min = 0, max = 10)
y <- 1 + x1 + x2 + rnorm(100)
y <- y/max(y)*10# %>% scale()
dat <- data.frame(x1, x2, y)
fit_plane <- function(data){
fit_plane <- lm(x2 ~ 1 + x1 + y, data = data)
#Graph Resolution (more important for more complex shapes)
graph_reso <- 0.05
#Setup Axis
axis_x <- seq(0, 10, by = graph_reso)
axis_y <- seq(min(y), max(y), by = graph_reso)
#Sample points
fit_plane_surface <- expand.grid(
x1 = axis_x,
y = axis_y,
KEEP.OUT.ATTRS = F
)
fit_plane_surface$x2 <- predict.lm(fit_plane, newdata = fit_plane_surface)
library(reshape2)
fit_plane_surface <- acast(fit_plane_surface, y ~ x1, value.var = "x2")
return(fit_plane_surface)
}
fit_plane_surface <- fit_plane(dat)
plot_plane <- function(data, surface){
library(plotly)
graph_reso <- 0.05
axis_x <- seq(0, 10, by = graph_reso)
axis_y <- seq(min(y), max(y), by = graph_reso)
income_plot <- plot_ly(
dat,
x = ~ x1,
y = ~ y,
z = ~ x2,
#text = ~ cntry,
type = "scatter3d",
mode = "markers", width = 900, height = 700
#marker = list(color = hcolors)
)
income_plot2 <- add_trace(
p = income_plot,
z = fit_plane_surface,
x = axis_x,
y = axis_y,
type = "surface"
)
return(income_plot2)
}
plot_plane(dat, fit_plane_surface)
'surface' objects don't have these attributes: 'mode'
Valid attributes include:
'type', 'visible', 'showlegend', 'legendgroup', 'opacity', 'name', 'uid', 'ids', 'customdata', 'hoverinfo', 'hoverlabel', 'stream', 'z', 'x', 'y', 'text', 'surfacecolor', 'cauto', 'cmin', 'cmax', 'colorscale', 'autocolorscale', 'reversescale', 'showscale', 'colorbar', 'contours', 'hidesurface', 'lightposition', 'lighting', '_deprecated', 'xcalendar', 'ycalendar', 'zcalendar', 'scene', 'idssrc', 'customdatasrc', 'hoverinfosrc', 'zsrc', 'xsrc', 'ysrc', 'textsrc', 'surfacecolorsrc', 'key', 'set', 'frame', 'transforms', '_isNestedKey', '_isSimpleKey', '_isGraticule'
'surface' objects don't have these attributes: 'mode'
Valid attributes include:
'type', 'visible', 'showlegend', 'legendgroup', 'opacity', 'name', 'uid', 'ids', 'customdata', 'hoverinfo', 'hoverlabel', 'stream', 'z', 'x', 'y', 'text', 'surfacecolor', 'cauto', 'cmin', 'cmax', 'colorscale', 'autocolorscale', 'reversescale', 'showscale', 'colorbar', 'contours', 'hidesurface', 'lightposition', 'lighting', '_deprecated', 'xcalendar', 'ycalendar', 'zcalendar', 'scene', 'idssrc', 'customdatasrc', 'hoverinfosrc', 'zsrc', 'xsrc', 'ysrc', 'textsrc', 'surfacecolorsrc', 'key', 'set', 'frame', 'transforms', '_isNestedKey', '_isSimpleKey', '_isGraticule'
turn x2 and y
fit_plane <- function(data){
fit_plane <- lm(y ~ 1 + x1 + x2, data = data)
#Graph Resolution (more important for more complex shapes)
graph_reso <- 0.05
#Setup Axis
axis_x1 <- seq(0, 10, by = graph_reso)
axis_x2 <- seq(0, 10, by = graph_reso)
#Sample points
fit_plane_surface <- expand.grid(
x1 = axis_x1,
x2 = axis_x2,
KEEP.OUT.ATTRS = F
)
fit_plane_surface$y <- predict.lm(fit_plane, newdata = fit_plane_surface)
library(reshape2)
fit_plane_surface <- acast(fit_plane_surface, x2 ~ x1, value.var = "y")
return(fit_plane_surface)
}
fit_plane_surface <- fit_plane(dat)
plot_plane <- function(data, surface){
library(plotly)
graph_reso <- 0.05
axis_x1 <- seq(0, 10, by = graph_reso)
axis_x2 <- seq(0, 10, by = graph_reso)
income_plot <- plot_ly(
dat,
x = ~ x1,
y = ~ x2,
z = ~ y,
#text = ~ cntry,
type = "scatter3d",
mode = "markers", width = 900, height = 700
#marker = list(color = hcolors)
)
income_plot2 <- add_trace(
p = income_plot,
z = fit_plane_surface,
x = axis_x1,
y = axis_x2,
type = "surface"
)
return(income_plot2)
}
plot_plane(dat, fit_plane_surface)
'surface' objects don't have these attributes: 'mode'
Valid attributes include:
'type', 'visible', 'showlegend', 'legendgroup', 'opacity', 'name', 'uid', 'ids', 'customdata', 'hoverinfo', 'hoverlabel', 'stream', 'z', 'x', 'y', 'text', 'surfacecolor', 'cauto', 'cmin', 'cmax', 'colorscale', 'autocolorscale', 'reversescale', 'showscale', 'colorbar', 'contours', 'hidesurface', 'lightposition', 'lighting', '_deprecated', 'xcalendar', 'ycalendar', 'zcalendar', 'scene', 'idssrc', 'customdatasrc', 'hoverinfosrc', 'zsrc', 'xsrc', 'ysrc', 'textsrc', 'surfacecolorsrc', 'key', 'set', 'frame', 'transforms', '_isNestedKey', '_isSimpleKey', '_isGraticule'
'surface' objects don't have these attributes: 'mode'
Valid attributes include:
'type', 'visible', 'showlegend', 'legendgroup', 'opacity', 'name', 'uid', 'ids', 'customdata', 'hoverinfo', 'hoverlabel', 'stream', 'z', 'x', 'y', 'text', 'surfacecolor', 'cauto', 'cmin', 'cmax', 'colorscale', 'autocolorscale', 'reversescale', 'showscale', 'colorbar', 'contours', 'hidesurface', 'lightposition', 'lighting', '_deprecated', 'xcalendar', 'ycalendar', 'zcalendar', 'scene', 'idssrc', 'customdatasrc', 'hoverinfosrc', 'zsrc', 'xsrc', 'ysrc', 'textsrc', 'surfacecolorsrc', 'key', 'set', 'frame', 'transforms', '_isNestedKey', '_isSimpleKey', '_isGraticule'
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCmBgYHtyfQpsaWJyYXJ5KHBsb3RseSkKbGlicmFyeShyZXNoYXBlMikKbGlicmFyeShkcGx5cikKCmxvYWQoImVzc193b3Jrc2hvcC5SZGF0YSIpCgplc3NfZ2VyIDwtIGVzcyAlPiUKICBmaWx0ZXIoY291bnRyeSA9PSAiREUiKQoKI2xvYWQgZGF0YQplc3NfcGxhbmUgPC0gZXNzX2dlciAlPiUKICBzZWxlY3QoZWR1LCBpbW1fZWNvbiwgaW5jb21lKSAlPiUKICAjbXV0YXRlKGltbV9lY29uID0gc2NhbGUoaW1tX2Vjb24pKSAlPiUKICBuYS5vbWl0KCkgJT4lCiAgc2FtcGxlX24oc2l6ZSA9IDEwMCkKICAjbXV0YXRlKHBvbF9pbnRlciA9IGlmZWxzZShwb2xfaW50ZXIgPT0gIkZlbWFsZSIsIDEsIDApKQoKZml0X3BsYW5lIDwtIGxtKGluY29tZSB+IDEgKyBlZHUgKyBpbW1fZWNvbiwgZGF0YSA9IGVzc19wbGFuZSkKCiNHcmFwaCBSZXNvbHV0aW9uIChtb3JlIGltcG9ydGFudCBmb3IgbW9yZSBjb21wbGV4IHNoYXBlcykKZ3JhcGhfcmVzbyA8LSAwLjA1CgojU2V0dXAgQXhpcwpheGlzX3ggPC0gc2VxKDAsIDEwLCBieSA9IGdyYXBoX3Jlc28pCmF4aXNfeSA8LSBzZXEoMCwgMTAsIGJ5ID0gZ3JhcGhfcmVzbykKCiNTYW1wbGUgcG9pbnRzCmZpdF9wbGFuZV9zdXJmYWNlIDwtIGV4cGFuZC5ncmlkKAogIGVkdSA9IGF4aXNfeCwKICBpbW1fZWNvbiA9IGF4aXNfeSwKICBLRUVQLk9VVC5BVFRSUyA9IEYKKQoKZml0X3BsYW5lX3N1cmZhY2UkaW5jb21lIDwtIHByZWRpY3QubG0oZml0X3BsYW5lLCBuZXdkYXRhID0gZml0X3BsYW5lX3N1cmZhY2UpCmxpYnJhcnkocmVzaGFwZTIpCmZpdF9wbGFuZV9zdXJmYWNlIDwtIGFjYXN0KGZpdF9wbGFuZV9zdXJmYWNlLCBpbW1fZWNvbiB+IGVkdSwgdmFsdWUudmFyID0gImluY29tZSIpCgojaGNvbG9ycz1jKCJibHVlIiwgInJlZCIpW2RhdDEkd2VhbHRoXQpsaWJyYXJ5KHBsb3RseSkKCmluY29tZV9wbG90IDwtIHBsb3RfbHkoCiAgZXNzX3BsYW5lLAogIHggPSB+IGVkdSwKICB5ID0gfiBpbmNvbWUsCiAgeiA9IH4gaW1tX2Vjb24sCiAgI3RleHQgPSB+IGNudHJ5LAogIHR5cGUgPSAic2NhdHRlcjNkIiwKICBtb2RlID0gIm1hcmtlcnMiLCB3aWR0aCA9IDkwMCwgaGVpZ2h0ID0gNzAwCiAgI21hcmtlciA9IGxpc3QoY29sb3IgPSBoY29sb3JzKQopCgppbmNvbWVfcGxvdDIgPC0gYWRkX3RyYWNlKAogIHAgPSBpbmNvbWVfcGxvdCwKICB6ID0gZml0X3BsYW5lX3N1cmZhY2UsCiAgeCA9IGF4aXNfeCwKICB5ID0gYXhpc195LAogIHR5cGUgPSAic3VyZmFjZSIKKQoKaW5jb21lX3Bsb3QyCmBgYAoKCgpgYGB7cn0KeDEgPC0gcnVuaWYoMTAwLCBtaW4gPSAwLCBtYXggPSAxMCkKaGlzdCh4MSkKCngyIDwtIHJ1bmlmKDEwMCwgbWluID0gMCwgbWF4ID0gMTApCgp5IDwtIDEgKyB4MSArIHgyICsgcm5vcm0oMTAwKSAKeSA8LSB5L21heCh5KSoxMCMgJT4lIHNjYWxlKCkKCmRhdCA8LSBkYXRhLmZyYW1lKHgxLCB4MiwgeSkKYGBgCgpgYGB7cn0KZml0X3BsYW5lIDwtIGZ1bmN0aW9uKGRhdGEpewogIAogIGZpdF9wbGFuZSA8LSBsbSh4MiB+IDEgKyB4MSArIHksIGRhdGEgPSBkYXRhKQogIAogICNHcmFwaCBSZXNvbHV0aW9uIChtb3JlIGltcG9ydGFudCBmb3IgbW9yZSBjb21wbGV4IHNoYXBlcykKICBncmFwaF9yZXNvIDwtIDAuMDUKICAKICAjU2V0dXAgQXhpcwogIGF4aXNfeCA8LSBzZXEoMCwgMTAsIGJ5ID0gZ3JhcGhfcmVzbykKICBheGlzX3kgPC0gc2VxKG1pbih5KSwgbWF4KHkpLCBieSA9IGdyYXBoX3Jlc28pCiAgCiAgI1NhbXBsZSBwb2ludHMKICBmaXRfcGxhbmVfc3VyZmFjZSA8LSBleHBhbmQuZ3JpZCgKICAgIHgxID0gYXhpc194LAogICAgeSA9IGF4aXNfeSwKICAgIEtFRVAuT1VULkFUVFJTID0gRgogICkKICAKICBmaXRfcGxhbmVfc3VyZmFjZSR4MiA8LSBwcmVkaWN0LmxtKGZpdF9wbGFuZSwgbmV3ZGF0YSA9IGZpdF9wbGFuZV9zdXJmYWNlKQogIGxpYnJhcnkocmVzaGFwZTIpCiAgZml0X3BsYW5lX3N1cmZhY2UgPC0gYWNhc3QoZml0X3BsYW5lX3N1cmZhY2UsIHkgfiB4MSwgdmFsdWUudmFyID0gIngyIikKICAKICByZXR1cm4oZml0X3BsYW5lX3N1cmZhY2UpCn0KCgpmaXRfcGxhbmVfc3VyZmFjZSA8LSBmaXRfcGxhbmUoZGF0KQoKCnBsb3RfcGxhbmUgPC0gZnVuY3Rpb24oZGF0YSwgc3VyZmFjZSl7CiAgbGlicmFyeShwbG90bHkpCiAgCiAgZ3JhcGhfcmVzbyA8LSAwLjA1CiAgYXhpc194IDwtIHNlcSgwLCAxMCwgYnkgPSBncmFwaF9yZXNvKQogIGF4aXNfeSA8LSBzZXEobWluKHkpLCBtYXgoeSksIGJ5ID0gZ3JhcGhfcmVzbykKICAKICAKICBpbmNvbWVfcGxvdCA8LSBwbG90X2x5KAogICAgZGF0LAogICAgeCA9IH4geDEsCiAgICB5ID0gfiB5LAogICAgeiA9IH4geDIsCiAgICAjdGV4dCA9IH4gY250cnksCiAgICB0eXBlID0gInNjYXR0ZXIzZCIsCiAgICBtb2RlID0gIm1hcmtlcnMiLCB3aWR0aCA9IDkwMCwgaGVpZ2h0ID0gNzAwCiAgICAjbWFya2VyID0gbGlzdChjb2xvciA9IGhjb2xvcnMpCiAgKQogIAogIGluY29tZV9wbG90MiA8LSBhZGRfdHJhY2UoCiAgICBwID0gaW5jb21lX3Bsb3QsCiAgICB6ID0gZml0X3BsYW5lX3N1cmZhY2UsCiAgICB4ID0gYXhpc194LAogICAgeSA9IGF4aXNfeSwKICAgIHR5cGUgPSAic3VyZmFjZSIKICApCiAgcmV0dXJuKGluY29tZV9wbG90MikKfQoKcGxvdF9wbGFuZShkYXQsIGZpdF9wbGFuZV9zdXJmYWNlKQpgYGAKCgoKCiMjIHR1cm4geDIgYW5kIHkKCmBgYHtyfQpmaXRfcGxhbmUgPC0gZnVuY3Rpb24oZGF0YSl7CiAgCiAgZml0X3BsYW5lIDwtIGxtKHkgfiAxICsgeDEgKyB4MiwgZGF0YSA9IGRhdGEpCiAgCiAgI0dyYXBoIFJlc29sdXRpb24gKG1vcmUgaW1wb3J0YW50IGZvciBtb3JlIGNvbXBsZXggc2hhcGVzKQogIGdyYXBoX3Jlc28gPC0gMC4wNQogIAogICNTZXR1cCBBeGlzCiAgYXhpc194MSA8LSBzZXEoMCwgMTAsIGJ5ID0gZ3JhcGhfcmVzbykKICBheGlzX3gyIDwtIHNlcSgwLCAxMCwgYnkgPSBncmFwaF9yZXNvKQogIAogICNTYW1wbGUgcG9pbnRzCiAgZml0X3BsYW5lX3N1cmZhY2UgPC0gZXhwYW5kLmdyaWQoCiAgICB4MSA9IGF4aXNfeDEsCiAgICB4MiA9IGF4aXNfeDIsCiAgICBLRUVQLk9VVC5BVFRSUyA9IEYKICApCiAgCiAgZml0X3BsYW5lX3N1cmZhY2UkeSA8LSBwcmVkaWN0LmxtKGZpdF9wbGFuZSwgbmV3ZGF0YSA9IGZpdF9wbGFuZV9zdXJmYWNlKQogIGxpYnJhcnkocmVzaGFwZTIpCiAgZml0X3BsYW5lX3N1cmZhY2UgPC0gYWNhc3QoZml0X3BsYW5lX3N1cmZhY2UsIHgyIH4geDEsIHZhbHVlLnZhciA9ICJ5IikKICAKICByZXR1cm4oZml0X3BsYW5lX3N1cmZhY2UpCn0KCgpmaXRfcGxhbmVfc3VyZmFjZSA8LSBmaXRfcGxhbmUoZGF0KQoKCnBsb3RfcGxhbmUgPC0gZnVuY3Rpb24oZGF0YSwgc3VyZmFjZSl7CiAgbGlicmFyeShwbG90bHkpCiAgCiAgZ3JhcGhfcmVzbyA8LSAwLjA1CiAgYXhpc194MSA8LSBzZXEoMCwgMTAsIGJ5ID0gZ3JhcGhfcmVzbykKICBheGlzX3gyIDwtIHNlcSgwLCAxMCwgYnkgPSBncmFwaF9yZXNvKQogIAogIAogIGluY29tZV9wbG90IDwtIHBsb3RfbHkoCiAgICBkYXQsCiAgICB4ID0gfiB4MSwKICAgIHkgPSB+IHgyLAogICAgeiA9IH4geSwKICAgICN0ZXh0ID0gfiBjbnRyeSwKICAgIHR5cGUgPSAic2NhdHRlcjNkIiwKICAgIG1vZGUgPSAibWFya2VycyIsIHdpZHRoID0gOTAwLCBoZWlnaHQgPSA3MDAKICAgICNtYXJrZXIgPSBsaXN0KGNvbG9yID0gaGNvbG9ycykKICApCiAgCiAgaW5jb21lX3Bsb3QyIDwtIGFkZF90cmFjZSgKICAgIHAgPSBpbmNvbWVfcGxvdCwKICAgIHogPSBmaXRfcGxhbmVfc3VyZmFjZSwKICAgIHggPSBheGlzX3gxLAogICAgeSA9IGF4aXNfeDIsCiAgICB0eXBlID0gInN1cmZhY2UiCiAgKQogIHJldHVybihpbmNvbWVfcGxvdDIpCn0KCgpgYGAKCg==